<?php

class LoginSuccess_Model extends LawsBase_Model {

	/** 入力チェック結果格納変数 */
	private static $validate;

	/** コンストラクタ */
	public function __construct() {
		parent::__construct();
	}

	/**
	 * ログイン処理
	 *
	 * 入力項目のチェックを行う。
	 * OKの場合:セッションにユーザ情報を登録し、メイン画面を表示する
	 * NGの場合:エラーメッセージを表示する
	 *
	 * (non-PHPdoc)
	 * @see application/models/LawsBase_Model#execute()
	 */
	public function execute(PHPTAL $template) {
		// TODO Lty-Chiba
		// parent::saveToken();

		self::$validate = new Validation_Core($_POST);

		//インプットデータValidationチェック
		if (self::_inputCheck()){
			//ログイン成功
			$template->title = 'mainpage';
			$template->loginUser = parent::getUser()->USER_NAME;
			$template->setSource(parent::$tempStore->getTemplate(C_MAIN_TEMPLATE));

		} else {
			//ログイン失敗
			$template->title = 'login';
			$template->dispErr = 'errBoxVisible';
			$template->txtLoginid = $_POST["txtLoginid"];
			$template->hogehoge = 'hogehogehoge';
			$template->errMsgs = self::$validate->errors('error_messages');;
			$template->setSource(parent::$tempStore->getTemplate(C_LOGIN_TEMPLATE));

			// TODO Lty-Chiba
			// sessionにユーザ情報を登録する
		}

		// ユーザ登録画面のテンプレートを取得
		echo $template->execute();
	}

	/**
	 * 入力チェック
	 */
	private function _inputCheck(){
		//データをトリムしちゃう
		self::$validate->pre_filter('trim', TRUE);

		//必須チェックルール設定
		self::$validate->add_rules('txtLoginid', 'required');
		self::$validate->add_rules('txtPass', 'required');
		//レングスチェックルール設定　最小1桁、最大10桁
//		self::$validate->add_rules('txtLoginid', 'length[1,10]');
		self::$validate->add_rules('txtPass', 'length[1,10]');
		//入力文字ルール設定　英数字、アンダースコア、ダッシュはOK
//		self::$validate->add_rules('txtLoginid', 'alpha_dash');
		self::$validate->add_rules('txtPass', 'alpha_dash');

		//Validationチェック後passCheckメソッドを呼出、パスワードチェックを行う。
		self::$validate->add_callbacks('txtPass', array($this, 'isLogin'));

		//Validationチェック実行
		return self::$validate->validate();
	}

	/**
	 * ログインチェック
	 *
	 * 入力されたIDとPassからユーザ情報が存在するかチェックを行う
	 * NGの場合、エラーメッセージを表示する
	 */
	public function isLogin() {
		$user = ORM::factory(LawsUser_Model::$MODEL_NAME)->
			where(array('USER_ID' => self::$validate->txtLoginid, 'USER_PW' => self::$validate->txtPass))->find();

		// データが存在しない場合エラー
		if(empty($user->USER_ID)) {
			self::$validate->add_error('txtPass', 'pass_err');
		}
		Session::instance()->set(LawsBase_Model::USER_DETAIL, $user);
	}
}